/**
 * @file difyDirectTest.js
 * @description 直接测试Dify API连接的工具函数
 * @created 2024-07-10
 */

/**
 * 直接测试与Dify API的连接
 * @param {string} apiUrl - Dify API URL
 * @param {string} apiKey - Dify API Key
 * @returns {Promise} 返回测试结果
 */
export async function testDifyDirectConnection(apiUrl = 'http://121.40.242.43/v1', apiKey = 'app-zWTMgCLb1yICdF0Vv1JE8E1S') {
  try {
    console.log('开始直接测试Dify API连接...')
    
    // 构建请求头
    const headers = {
      'Authorization': `Bearer ${apiKey}`,
      'Content-Type': 'application/json'
    }
    
    // 构建请求体 - 确保包含所有必要的字段
    const payload = {
      query: '你好，请简单自我介绍',
      inputs: {},
      response_mode: 'blocking',
      user: 'test_user_' + Date.now()
    }
    
    // 尝试直接请求
    const endpoint = '/chat-messages';
    console.log(`请求地址: ${apiUrl}${endpoint}`)
    console.log('请求头:', headers)
    console.log('请求体:', payload)
    
    const response = await fetch(`${apiUrl}${endpoint}`, {
      method: 'POST',
      headers: headers,
      body: JSON.stringify(payload),
      mode: 'cors'
    })
    
    console.log('响应状态:', response.status, response.statusText)
    
    if (response.ok) {
      const data = await response.json()
      console.log('响应数据:', data)
      return {
        success: true,
        status: response.status,
        data: data
      }
    } else {
      const errorText = await response.text()
      console.error('响应错误:', errorText)
      
      // 尝试解析错误响应
      let errorDetail = errorText;
      try {
        const errorJson = JSON.parse(errorText);
        errorDetail = errorJson.error || errorJson.message || errorText;
      } catch (e) {
        // 如果无法解析为JSON，使用原始文本
      }
      
      return {
        success: false,
        status: response.status,
        error: errorDetail
      }
    }
  } catch (error) {
    console.error('测试Dify连接出错:', error)
    return {
      success: false,
      error: error.message
    }
  }
}

/**
 * 使用fetch API直接请求Django后端测试连接
 * @returns {Promise} 返回测试结果
 */
export async function testDjangoBackendConnection() {
  try {
    console.log('开始测试Django后端连接...')
    
    const response = await fetch('/api/admin/dify/test-connection', {
      method: 'GET',
      headers: {
        'Content-Type': 'application/json'
      }
    })
    
    console.log('Django响应状态:', response.status, response.statusText)
    
    if (response.ok) {
      const data = await response.json()
      console.log('Django响应数据:', data)
      return {
        success: true,
        status: response.status,
        data: data
      }
    } else {
      const errorText = await response.text()
      console.error('Django响应错误:', errorText)
      return {
        success: false,
        status: response.status,
        error: errorText
      }
    }
  } catch (error) {
    console.error('测试Django连接出错:', error)
    return {
      success: false,
      error: error.message
    }
  }
}

/**
 * 检查浏览器是否支持CORS
 * @returns {boolean} 是否支持CORS
 */
export function checkCORSSupport() {
  return 'fetch' in window && 'Headers' in window && 'Request' in window && 'Response' in window;
}

/**
 * 运行完整的Dify连接诊断
 * @returns {Promise} 返回诊断结果
 */
export async function runDifyDiagnostics() {
  const results = {
    corsSupport: checkCORSSupport(),
    djangoTest: null,
    difyDirectTest: null,
    diagnosis: ''
  }
  
  // 检查CORS支持
  if (!results.corsSupport) {
    results.diagnosis = '您的浏览器不完全支持CORS，这可能会导致API请求失败。'
    return results
  }
  
  // 测试Django后端
  results.djangoTest = await testDjangoBackendConnection()
  
  // 如果Django测试成功，再测试直接连接Dify
  if (results.djangoTest.success) {
    results.difyDirectTest = await testDifyDirectConnection()
  }
  
  // 诊断结果
  if (!results.djangoTest.success) {
    results.diagnosis = '无法连接到Django后端，请检查网络连接和服务器状态。'
  } else if (!results.difyDirectTest.success) {
    results.diagnosis = 'Django后端连接正常，但无法直接连接到Dify API。可能是API密钥错误、网络问题或Dify服务不可用。'
  } else {
    results.diagnosis = '所有连接测试通过！Dify API连接正常。'
  }
  
  return results
} 